package com.powerbank.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 用户优惠券实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("user_coupon")
public class UserCoupon {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 用户ID
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 优惠券模板ID
     */
    @TableField("template_id")
    private Long templateId;

    /**
     * 优惠券编码
     */
    @TableField("coupon_code")
    private String couponCode;

    /**
     * 优惠券名称
     */
    @TableField("coupon_name")
    private String couponName;

    /**
     * 优惠券类型：DISCOUNT-满减券，RATE-折扣券，CASH-代金券
     */
    @TableField("coupon_type")
    private String couponType;

    /**
     * 优惠券金额
     */
    @TableField("coupon_amount")
    private BigDecimal couponAmount;

    /**
     * 折扣率
     */
    @TableField("discount_rate")
    private BigDecimal discountRate;

    /**
     * 使用门槛
     */
    @TableField("min_amount")
    private BigDecimal minAmount;

    /**
     * 最大优惠金额
     */
    @TableField("max_discount")
    private BigDecimal maxDiscount;

    /**
     * 适用范围
     */
    @TableField("apply_scope")
    private String applyScope;

    /**
     * 优惠券状态：0-未使用，1-已使用，2-已过期，3-已冻结
     */
    @TableField("coupon_status")
    private Integer couponStatus;

    /**
     * 获得时间
     */
    @TableField("receive_time")
    private LocalDateTime receiveTime;

    /**
     * 有效期开始时间
     */
    @TableField("valid_start_time")
    private LocalDateTime validStartTime;

    /**
     * 有效期结束时间
     */
    @TableField("valid_end_time")
    private LocalDateTime validEndTime;

    /**
     * 使用时间
     */
    @TableField("use_time")
    private LocalDateTime useTime;

    /**
     * 使用订单ID
     */
    @TableField("order_id")
    private Long orderId;

    /**
     * 使用订单号
     */
    @TableField("order_no")
    private String orderNo;

    /**
     * 获得方式：MANUAL-手动发放，AUTO-自动发放，ACTIVITY-活动获得，SHARE-分享获得
     */
    @TableField("receive_method")
    private String receiveMethod;

    /**
     * 来源描述
     */
    @TableField("source_desc")
    private String sourceDesc;

    /**
     * 创建时间
     */
    @TableField(value = "created_time", fill = FieldFill.INSERT)
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedTime;

    /**
     * 是否删除：0-否，1-是
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}